from flask import Flask
from flask_sqlalchemy import SQLAlchemy


class Config(object):
    """项目配置信息"""
    DEBUG = True
    # mysql数据库连接配置 格式:mysql://账号:密码@ip地址:端口号/数据库名称
    SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:mysql@127.0.0.1:3306/flask_sql'
    # 跟踪数据库修改操作
    SQLALCHEMY_TRACK_MODIFICATIONS = True

app = Flask(__name__)

# 将配置信息关联到app中
app.config.from_object(Config)

# 查询时会显示原始sql语句
# app.config['SQLALCHEMY_ECHO'] = True


# 创建数据库对象
db = SQLAlchemy(app)


# 模型类
class Role(db.Model):
    """角色表"""
    # 使用__tablename__自定义表名称,如果不设置则默认为类名的小写role
    __tablename__ = 'simple01'
    # id字段,db.Integer: 32位整型数据     primary_key=True:设置主键
    id = db.Column(db.Integer, primary_key=True)
    # name字段  db.String(128): 128位字符串类型  unique=True:设置该字段的唯一性
    name = db.Column(db.String(128), unique=True)

    """
    定义关系字段   该字段并不是数据库一列,在数据库中并不存在,只是在flask代码层面方便查询而定义的字段
    backref  反向引用,给User对象使用
    """
    users = db.relationship('User',backref='role')

    def __repr__(self):
        """
        自定义格式化输出  Role表: id    name
        :return:
        """
        return "Role表: %s    %s" % (self.id,self.name)

class User(db.Model):
    """用户表"""
    __tablename__ = 'user'
    # id字段
    id = db.Column(db.Integer,primary_key=True)
    # name字段
    name = db.Column(db.String(128), unique=True)
    # 创建外键 方式:db.ForeignKey(Role.id)或者db.ForeignKey('simple01.id')
    role_id = db.Column(db.Integer, db.ForeignKey('simple01.id'))
    def __repr__(self):
        """自定格式输出"""
        return "User表: %s    %s" % (self.id,self.name)

@app.route('/')
def hello():
    return 'hello world'


if __name__ == '__main__':
    db.drop_all()
    # 创建表需执行db.create_all(),不然数据库中没有,以上代码只是连接数据库和定义表单
    db.create_all()
    app.run()


"""
flask中连接MySQL出现ModuleNotFoundError: No module named 'MySQLdb'错误

解决方式一:只要在配置SQLALCHEMY_DATABASE_URI时,加上一个pymysql就可以了
    app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:dzd123@localhost/你的数据库名'
    或者:import pymysql
        pymysql.install_as_MySQLdb()

解决方式二:安装mysqldb驱动
pip install flask-mysqldb
"""
